package com.hr.leetcode.字符串;

/**
 * @author zhz
 * @date 2020/09/16
 **/
public class 对称矩阵的压缩存储 {
    public static void main(String[] args) {
        int[][] matrix = {
                {3, 6, 4, 7, 8},
                {6, 2, 8, 4, 2},
                {4, 8, 1, 6, 9},
                {7, 4, 6, 0, 5},
                {8, 2, 9, 5, 7}
        };
        System.out.println(对称矩阵的压缩存储.compress(5, matrix).toString());
    }
    /**
     * 用于实现对称矩阵的解压缩操作
     * @param order 对称矩阵的阶数
     * @param arr 压缩存储之后的一维数组
     * @return 解压缩之后的对称矩阵
     */
    public static int[][] decompression(int order, int[] arr) {
        // 1.定义一个矩阵，用于保存解压缩之后的结果
        int[][] matrix=new int[order][order];
        //2、定义一个嵌套循环，用于
        return new int[][]{};
    }
    /**
     * 用于实现对称矩阵的压缩存储操作
     * @param order 对称矩阵的阶数
     * @param matrix 需要压缩存储的对称矩阵
     * @return 返回压缩存储之后的一维数组
     */
    public static int[] compress(int order,int[][] matrix){
        //1、定义一个一维数组，用于保存压缩存储之后的结果
        int[] arr=new int[order*(order+1)/2];
        //2、定义一个被套循环，用于获得对称矩阵中下三角形及对角线的元素
        for (int i = 0; i < order; i++) {
            for (int j = 0; j <= i; j++) {
                //3、实现对称矩阵的压缩存储操作
                arr[i*(i+1)/2+j]=matrix[i][j];
            }
        }
        return arr;
    }

}
